/*
 * Copyright 2018 Google
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/firestore/v1beta1/document.proto

// This CPP symbol can be defined to use imports that match up to the framework
// imports needed when using CocoaPods.
#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS)
 #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0
#endif

#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
 #import <Protobuf/GPBProtocolBuffers.h>
#else
 #import "GPBProtocolBuffers.h"
#endif

#if GOOGLE_PROTOBUF_OBJC_VERSION < 30002
#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources.
#endif
#if 30002 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION
#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources.
#endif

// @@protoc_insertion_point(imports)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"

CF_EXTERN_C_BEGIN

@class GCFSArrayValue;
@class GCFSMapValue;
@class GCFSValue;
@class GPBTimestamp;
@class GTPLatLng;
GPB_ENUM_FWD_DECLARE(GPBNullValue);

NS_ASSUME_NONNULL_BEGIN

#pragma mark - GCFSDocumentRoot

/**
 * Exposes the extension registry for this file.
 *
 * The base class provides:
 * @code
 *   + (GPBExtensionRegistry *)extensionRegistry;
 * @endcode
 * which is a @c GPBExtensionRegistry that includes all the extensions defined by
 * this file and all files that it depends on.
 **/
@interface GCFSDocumentRoot : GPBRootObject
@end

#pragma mark - GCFSDocument

typedef GPB_ENUM(GCFSDocument_FieldNumber) {
  GCFSDocument_FieldNumber_Name = 1,
  GCFSDocument_FieldNumber_Fields = 2,
  GCFSDocument_FieldNumber_CreateTime = 3,
  GCFSDocument_FieldNumber_UpdateTime = 4,
};

/**
 * A Firestore document.
 *
 * Must not exceed 1 MiB - 4 bytes.
 **/
@interface GCFSDocument : GPBMessage

/**
 * The resource name of the document, for example
 * `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
 **/
@property(nonatomic, readwrite, copy, null_resettable) NSString *name;

/**
 * The document's fields.
 *
 * The map keys represent field names.
 *
 * A simple field name contains only characters `a` to `z`, `A` to `Z`,
 * `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
 * `foo_bar_17`.
 *
 * Field names matching the regular expression `__.*__` are reserved. Reserved
 * field names are forbidden except in certain documented contexts. The map
 * keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
 * empty.
 *
 * Field paths may be used in other contexts to refer to structured fields
 * defined here. For `map_value`, the field path is represented by the simple
 * or quoted field names of the containing fields, delimited by `.`. For
 * example, the structured field
 * `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
 * represented by the field path `foo.x&y`.
 *
 * Within a field path, a quoted field name starts and ends with `` ` `` and
 * may contain any character. Some characters, including `` ` ``, must be
 * escaped using a `\\`. For example, `` `x&y` `` represents `x&y` and
 * `` `bak\\`tik` `` represents `` bak`tik ``.
 **/
@property(nonatomic, readwrite, strong, null_resettable) NSMutableDictionary<NSString*, GCFSValue*> *fields;
/** The number of items in @c fields without causing the array to be created. */
@property(nonatomic, readonly) NSUInteger fields_Count;

/**
 * Output only. The time at which the document was created.
 *
 * This value increases monotonically when a document is deleted then
 * recreated. It can also be compared to values from other documents and
 * the `read_time` of a query.
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *createTime;
/** Test to see if @c createTime has been set. */
@property(nonatomic, readwrite) BOOL hasCreateTime;

/**
 * Output only. The time at which the document was last changed.
 *
 * This value is initially set to the `create_time` then increases
 * monotonically with each change to the document. It can also be
 * compared to values from other documents and the `read_time` of a query.
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *updateTime;
/** Test to see if @c updateTime has been set. */
@property(nonatomic, readwrite) BOOL hasUpdateTime;

@end

#pragma mark - GCFSValue

typedef GPB_ENUM(GCFSValue_FieldNumber) {
  GCFSValue_FieldNumber_BooleanValue = 1,
  GCFSValue_FieldNumber_IntegerValue = 2,
  GCFSValue_FieldNumber_DoubleValue = 3,
  GCFSValue_FieldNumber_ReferenceValue = 5,
  GCFSValue_FieldNumber_MapValue = 6,
  GCFSValue_FieldNumber_GeoPointValue = 8,
  GCFSValue_FieldNumber_ArrayValue = 9,
  GCFSValue_FieldNumber_TimestampValue = 10,
  GCFSValue_FieldNumber_NullValue = 11,
  GCFSValue_FieldNumber_StringValue = 17,
  GCFSValue_FieldNumber_BytesValue = 18,
};

typedef GPB_ENUM(GCFSValue_ValueType_OneOfCase) {
  GCFSValue_ValueType_OneOfCase_GPBUnsetOneOfCase = 0,
  GCFSValue_ValueType_OneOfCase_NullValue = 11,
  GCFSValue_ValueType_OneOfCase_BooleanValue = 1,
  GCFSValue_ValueType_OneOfCase_IntegerValue = 2,
  GCFSValue_ValueType_OneOfCase_DoubleValue = 3,
  GCFSValue_ValueType_OneOfCase_TimestampValue = 10,
  GCFSValue_ValueType_OneOfCase_StringValue = 17,
  GCFSValue_ValueType_OneOfCase_BytesValue = 18,
  GCFSValue_ValueType_OneOfCase_ReferenceValue = 5,
  GCFSValue_ValueType_OneOfCase_GeoPointValue = 8,
  GCFSValue_ValueType_OneOfCase_ArrayValue = 9,
  GCFSValue_ValueType_OneOfCase_MapValue = 6,
};

/**
 * A message that can hold any of the supported value types.
 **/
@interface GCFSValue : GPBMessage

/** Must have a value set. */
@property(nonatomic, readonly) GCFSValue_ValueType_OneOfCase valueTypeOneOfCase;

/** A null value. */
@property(nonatomic, readwrite) enum GPBNullValue nullValue;

/** A boolean value. */
@property(nonatomic, readwrite) BOOL booleanValue;

/** An integer value. */
@property(nonatomic, readwrite) int64_t integerValue;

/** A double value. */
@property(nonatomic, readwrite) double doubleValue;

/**
 * A timestamp value.
 *
 * Precise only to microseconds. When stored, any additional precision is
 * rounded down.
 **/
@property(nonatomic, readwrite, strong, null_resettable) GPBTimestamp *timestampValue;

/**
 * A string value.
 *
 * The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
 * Only the first 1,500 bytes of the UTF-8 representation are considered by
 * queries.
 **/
@property(nonatomic, readwrite, copy, null_resettable) NSString *stringValue;

/**
 * A bytes value.
 *
 * Must not exceed 1 MiB - 89 bytes.
 * Only the first 1,500 bytes are considered by queries.
 **/
@property(nonatomic, readwrite, copy, null_resettable) NSData *bytesValue;

/**
 * A reference to a document. For example:
 * `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
 **/
@property(nonatomic, readwrite, copy, null_resettable) NSString *referenceValue;

/** A geo point value representing a point on the surface of Earth. */
@property(nonatomic, readwrite, strong, null_resettable) GTPLatLng *geoPointValue;

/**
 * An array value.
 *
 * Cannot contain another array value.
 **/
@property(nonatomic, readwrite, strong, null_resettable) GCFSArrayValue *arrayValue;

/** A map value. */
@property(nonatomic, readwrite, strong, null_resettable) GCFSMapValue *mapValue;

@end

/**
 * Fetches the raw value of a @c GCFSValue's @c nullValue property, even
 * if the value was not defined by the enum at the time the code was generated.
 **/
int32_t GCFSValue_NullValue_RawValue(GCFSValue *message);
/**
 * Sets the raw value of an @c GCFSValue's @c nullValue property, allowing
 * it to be set to a value that was not defined by the enum at the time the code
 * was generated.
 **/
void SetGCFSValue_NullValue_RawValue(GCFSValue *message, int32_t value);

/**
 * Clears whatever value was set for the oneof 'valueType'.
 **/
void GCFSValue_ClearValueTypeOneOfCase(GCFSValue *message);

#pragma mark - GCFSArrayValue

typedef GPB_ENUM(GCFSArrayValue_FieldNumber) {
  GCFSArrayValue_FieldNumber_ValuesArray = 1,
};

/**
 * An array value.
 **/
@interface GCFSArrayValue : GPBMessage

/** Values in the array. */
@property(nonatomic, readwrite, strong, null_resettable) NSMutableArray<GCFSValue*> *valuesArray;
/** The number of items in @c valuesArray without causing the array to be created. */
@property(nonatomic, readonly) NSUInteger valuesArray_Count;

@end

#pragma mark - GCFSMapValue

typedef GPB_ENUM(GCFSMapValue_FieldNumber) {
  GCFSMapValue_FieldNumber_Fields = 1,
};

/**
 * A map value.
 **/
@interface GCFSMapValue : GPBMessage

/**
 * The map's fields.
 *
 * The map keys represent field names. Field names matching the regular
 * expression `__.*__` are reserved. Reserved field names are forbidden except
 * in certain documented contexts. The map keys, represented as UTF-8, must
 * not exceed 1,500 bytes and cannot be empty.
 **/
@property(nonatomic, readwrite, strong, null_resettable) NSMutableDictionary<NSString*, GCFSValue*> *fields;
/** The number of items in @c fields without causing the array to be created. */
@property(nonatomic, readonly) NSUInteger fields_Count;

@end

NS_ASSUME_NONNULL_END

CF_EXTERN_C_END

#pragma clang diagnostic pop

// @@protoc_insertion_point(global_scope)
